/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import bc.ComponentetrabajoFacadeLocal;
import bc.PresupuestoFacadeLocal;
import be.Cliente;
import be.Componentetrabajo;
import be.Precorte;
import be.Presupuesto;
import be.Tipocliente;
import be.Trabajo;
import be.Vendedor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Named;

/**
 *
 * @author yzavaleta
 */
@Named("managedBeanPresupuesto")
@SessionScoped
public class ManagedBeanPresupuesto implements Serializable {

    @EJB
    private ComponentetrabajoFacadeLocal componentetrabajoFacade;
    @EJB
    private PresupuestoFacadeLocal presupuestoFacade;

    private Presupuesto objeto;
    private Presupuesto objetoCrear;
    private List<Presupuesto> lista;
    private List<Presupuesto> listaFiltrada;
    private List<SelectItem> ListaItems = new LinkedList<SelectItem>();
    private HashMap<Integer, Presupuesto> myMapItems = new HashMap<Integer, Presupuesto>();
    private Trabajo objetoTrabajo;
    
    private Componentetrabajo objetoComponenteTrabajo;
    private List<Trabajo> listaTrabajo;
    private Cliente objetoCliente;
    private Componentetrabajo objetoComponentetrabajo;

    public ManagedBeanPresupuesto() {
        objeto = new Presupuesto();
        objetoCrear = new Presupuesto();
        lista = new LinkedList<>();
        listaFiltrada = new LinkedList<>();
        objetoCliente = new Cliente();
        objetoTrabajo = new Trabajo();
        listaTrabajo = new LinkedList<>();
        objetoComponentetrabajo = new Componentetrabajo();
    }

    public Componentetrabajo getObjetoComponentetrabajo() {
        return objetoComponentetrabajo;
    }

    public void setObjetoComponentetrabajo(Componentetrabajo objetoComponentetrabajo) {
        this.objetoComponentetrabajo = objetoComponentetrabajo;
    }

    public Trabajo getObjetoTrabajo() {
        return objetoTrabajo;
    }

    public void setObjetoTrabajo(Trabajo objetoTrabajo) {
        this.objetoTrabajo = objetoTrabajo;
    }

    public List<Trabajo> getListaTrabajo() {
        return listaTrabajo;
    }

    public void setListaTrabajo(List<Trabajo> listaTrabajo) {
        this.listaTrabajo = listaTrabajo;
    }

    public Cliente getObjetoCliente() {
        return objetoCliente;
    }

    public void setObjetoCliente(Cliente objetoCliente) {
        this.objetoCliente = objetoCliente;
    }

    public Presupuesto getObjeto() {
        return objeto;
    }

    public void setObjeto(Presupuesto objeto) {
        this.objeto = objeto;
    }

    public Presupuesto getObjetoCrear() {
        return objetoCrear;
    }

    public void setObjetoCrear(Presupuesto objetoCrear) {
        this.objetoCrear = objetoCrear;
    }

    public List<Presupuesto> getLista() {
        lista = new LinkedList<>();
        List<Presupuesto> lista_temporal = presupuestoFacade.findAll();
        try {
            for (int i = lista_temporal.size() - 1; i >= 0; i--) {
                lista.add(lista_temporal.get(i));
            }
        } catch (Exception e) {
        }
        return lista;
    }

    public void setLista(List<Presupuesto> lista) {
        this.lista = lista;
    }

    public List<Presupuesto> getListaFiltrada() {
        return listaFiltrada;
    }

    public void setListaFiltrada(List<Presupuesto> listaFiltrada) {
        this.listaFiltrada = listaFiltrada;
    }

    public List<SelectItem> getListaItems() {
        return ListaItems;
    }

    public void setListaItems(List<SelectItem> ListaItems) {
        this.ListaItems = ListaItems;
    }

    public HashMap<Integer, Presupuesto> getMyMapItems() {
        return myMapItems;
    }

    public void setMyMapItems(HashMap<Integer, Presupuesto> myMapItems) {
        this.myMapItems = myMapItems;
    }

    public void nuevo() {
        System.out.println(" creando nuevo ");
        objetoCrear = new Presupuesto();
        objetoCrear.setTrabajoList(new ArrayList<Trabajo>());
    }

    public void crear(ManagedBeanTrabajo BeanTrabajo) {

        try {

            

            objetoCrear.setFecha(new Date());
            objetoCrear.setFechaCreacionSistema(new Date());
            objetoCrear.setFechaCreacionUsuario(new Date());
            objetoCrear.setFechaEliminacion(new Date());
            objetoCrear.setEstadoExistencia(1);
            objetoCrear.setEstado("");
            objetoCrear.setEsaceptado("N");

            objetoCrear.setComision(1);
            objetoCrear.setBonificacion(0);
            objetoCrear.setUtilidad(0.0);
            objetoCrear.setValorimpuesto(0.0);
            objetoCrear.setValortotal(0.0);

            // aqui se crea el presupuesto:
            presupuestoFacade.create(objetoCrear);
            
            
            // actualizando los datos del presupuesto
            objetoCrear = presupuestoFacade.find(objetoCrear.getId());
            
            
            for (ManagedBeanImpresoGeneral p : BeanTrabajo.getListaImpresoGeneral()) {
                // empezamos a Grabar componentes Trabajo  
             
                 System.out.println("objetoCrear.getTrabajoList() "+objetoCrear.getTrabajoList());
                for(Trabajo t:objetoCrear.getTrabajoList()){
                    
                    System.out.println(" en trabajo esta "+t.getProducto());
                objetoComponentetrabajo = new Componentetrabajo();
                objetoComponentetrabajo.setTinta(p.getObjetoTinta());
                objetoComponentetrabajo.setComponente(p.getObjetoComponente());
                objetoComponentetrabajo.setFormatoimpresion(p.getObjetoFormatoimpresion());
                objetoComponentetrabajo.setFormatoacabado(p.getObjetoFormatoAcabado());
                objetoComponentetrabajo.setTrabajo(t);
                objetoComponentetrabajo.setComponente(p.getObjetoComponente());
               // objetoComponentetrabajo.setAumento(0);
               // objetoComponentetrabajo.setCantidad(0);
                objetoComponentetrabajo.setDescripcion("");
                objetoComponentetrabajo.setEstadoExistencia(1);
                objetoComponentetrabajo.setFechaCreacionSistema(new Date());
                objetoComponentetrabajo.setFechaCreacionUsuario(new Date());
                objetoComponentetrabajo.setFechaEliminacion(new Date());
                
                // necesito saber de donde consigo el pliego
                objetoComponentetrabajo.setPrecorte(new Precorte(1));
              
                
                    System.out.println(" VAMOS A INSERTAR LOS Componentetrabajo");
                    componentetrabajoFacade.create(objetoComponentetrabajo);
                    
                
                }
                
                
            }
            
            System.out.println(" se creo correctamente");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("REGISTRO GRABADO CON EXITO", "NUEVO ITEM"));

        } catch (Exception e) {
            e.printStackTrace();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("ERROR AL GRABAR", "CONTACTE AL ADMINISTRADOR"));

        }

    }

    public void agregarTrabajo() {

        try {
            objetoTrabajo.setFecha(new Date());
            objetoTrabajo.setFechaCreacionSistema(new Date());
            objetoTrabajo.setFechaCreacionUsuario(new Date());
            objetoTrabajo.setFechaEliminacion(new Date());
            objetoTrabajo.setEstadoExistencia(1);
            objetoTrabajo.setPresupuesto(objetoCrear);
           // objetoTrabajo.setVendedor(new Vendedor(1));

            // objetoTrabajo.setc
            if (objetoCrear.getTrabajoList() == null) {
                objetoCrear.setTrabajoList(new ArrayList<Trabajo>());
            }

            objetoCrear.getTrabajoList().add(objetoTrabajo);

            System.out.println(" se creo correctamente");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("REGISTRO GRABADO CON EXITO", "NUEVO ITEM"));

        } catch (Exception e) {
            e.printStackTrace();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("ERROR AL GRABAR", "CONTACTE AL ADMINISTRADOR"));

        }

    }

    public void nuevoTrabajo() {
        objetoTrabajo = new Trabajo();
    }
}
